///////////////////////////////////////////////////////////////////////////////////////////////////
/// \file formic/fqmc/line_search.h
///
/// \brief   header file for the line search function
///
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef FORMIC_FQMC_LINE_SEARCH_HEADER
#define FORMIC_FQMC_LINE_SEARCH_HEADER

#include<boost/shared_ptr.hpp>

#include<formic/random/random.h>

namespace formic {

  class InputBase;
  class Configuration;
  template<class S> class CoeffObj;

  namespace fqmc {

    template<class S> class Sampler;

    template<class S> void line_search(const formic::InputBase & userinp,
                                       const S * const update,
                                       const double max_sdev,
                                       boost::shared_ptr<formic::fqmc::Sampler<S> > & sampler,
                                       const boost::shared_ptr<formic::CoeffObj<S> > & vf,
                                       double & step_arg);

  }

}

#endif
